万字长文带你入门Docker | 您所在的位置:网站首页 › docker daocloud › 万字长文带你入门Docker |
1 Docker dockerfiler 镜像构建 Compose是在单机进行容器编排 Horbor 镜像仓库 Docker swarm 在多机进行容器编排 Docker Compose缺点是不能在分布式多机器上使用 Docker swarm缺点是不能同时编排多个服务, Docker Stack,可以在分布式多机器上同时编排多个服务。 1.1 Docker常用命令 如果在使用 镜像或者是容器的别名有问题的话,就使用它的容器id docker 服务 启动 停止 重启 查看 开机自启 systemctl start |stop | restart | status|enable docker docker 镜像 docker images 查看镜像 docker search 搜索镜像 docker pull centos:7 拉取镜像 docker push 推送镜像 在推送镜像的时候需要先登录 docker rmi 删除镜像 docker rmi docker images -q 删除所有版本 docker 容器 docker ps (-a 查看所有容器) -l :显示最近创建的容器。 -n :列出最近创建的n个容器。 docker start |stop | restart | status|enable 容器id 启动 停止 重启 查看 开机自启 docker run -i:表示运行容器 -t:启动后会进入其命令行 -d:后台运行 --name :创建的别名 -v:表示目录映射关系 -p:表示端口映射, / 如果一行写不下用/来换行 exec 进入运行时容器 示例docker exec -it 容器id /bin/bash logs -f 容器的日志 inspect 容器的信息信息 rm删除容器 Dockerfiler FROM 指定基础镜像 RUN 运行命令 EXPOSE 开放端口 ADD 复制文件到镜像 自动解压 docker build 构建示例 docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar . (-t表示 构建的文件 .是在当前目录) docker-compose docker-compose.yml docker-compose config -q 坚持语法是否有问题 docker-compose up 启动 -d 后台启动 docker-compose down 停止 其他 docker cp 复制一个文件到容器内部 文件路径 容器名:文件路径 docker cp /root/F.sql mysql:/ 1.2什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 把环境和项目进行打包,发布到docker仓库 Docker应用场景 Web 应用的自动化打包和发布 自动化测试和持续集成、发布 在服务型环境中部署和调整数据库或其他的后台应 docker 通过镜像和隔离机制来解决 DockerRUN 如果docker run hello-world 开始运行 docker会在本机寻找镜像,如果有就在本机运行,如果没有就去Dockerhup上下载,DockerHup是否可以找到,如果能找到就下载,找不到,就返回 Docke 如何工作的 是一个Client-Server结构系统,Docker的守护运行在主机上,通过Socket从客户端访问 DockerSever接收到Docker Client的指令 Docker 为什么比虚拟机更快 Docker 不需要在重新加载一个操作系统内核,而docker是利用宿主机的操作系统来操作的 1.3 docker 架构图 Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职 Docker Client 是一个客户端 systemctl start dcker 启动其客户端 进入客户端 然后才能发送一系列命令 docker run -d 也是这么一个意思 1 用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。 2 Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。 3 Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。 4 Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。 5 当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker容器网络环境。 6 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。 7 Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。 2 Docker基础使用 如果在安装docker 升级yum源 提升yum源找不到的话 yum clean all 清理 然后重新加载一下 yum makecache 2.1 docker安装 2.1.1 docker安装 或者使用脚本文件安装 vim docker.sh #!/bin/bash yum install -y yum-utils yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo mkdir -p /etc/docker && touch /etc/docker/daemon.json cat > /etc/docker/daemon.json > /mydata/elasticsearch/config/elasticsearch.yml 4 添加权限 chmod -R 777 /mydata/elasticsearch/ 5 运行容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms256m -Xmx512m" \ -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \ -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.4.2 kiban docker pull kibana:7.4.2 docker run --name kibana \ -e ELASTICSEARCH_HOSTS=http://120.78.150.188:9200 -p 5601:5601 \ -d kibana:7.4.2 但是还要进行目录挂载修改 yml文件 设置中文 IK分词器 Ik分词器版本要和ES和Kibana版本保持一致 不然可能启动不了docker 进入容器#此命令需要在容器中运行elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip 退出容器,重启容器 exit docker restart es7.8 4.6 nacos 如果用docker安装naocs如果是 2版本可能会启动不了 docker pull nacos/nacos-server:1.3.1 docker run \ --name nacos -d \ -p 8848:8848 \ --privileged=true \ --restart=always \ -e JVM_XMS=256m \ -e JVM_XMX=256m \ -e MODE=standalone \ -e PREFER_HOST_MODE=hostname \ nacos/nacos-server:1.3.1 访问测试 http://43.138.137.168:8848/nacos 4.7 MQ docker run \ -e RABBITMQ_DEFAULT_USER=zhuxiaoyi \ -e RABBITMQ_DEFAULT_PASS=412826zxyZXY \ --name rabbitmq \ --hostname mq1 \ -p 15672:15672 \ -p 5672:5672 \ -d \ rabbitmq:3-management 4.8 Nginx mkdir /root/docker/nginx mkdir /root/docker/nginx/conf 由于我们现在没有配置文件,也不知道配置什么。可以先启动一个nginx,讲他的配置文件拷贝出来 再作为映射,启动真正的nginx docker pull nginx:1.17.4 docker run --name some-nginx -d nginx:1.17.4 docker container cp some-nginx:/etc/nginx /root/docker/nginx/conf 然后就可以删除这个容器了 docker docker rm -f some-nginx 在重新启动nginx docker run --name nginx -p 80:80 \ -v /root/docker/nginx/conf:/etc/nginx \ -v /root/docker/nginx/html:/usr/share/nginx/html \ -d nginx:1.17.4 4.9 FTP服务器 1 需要账号和密码 docker run -v /data/dav:/usr/local/nginx/html -d -p 88:80 lutixiaya/nwebdav:latest chmod o+w /data/dav ip+端口访问测试 需要输入账号和密码 使用winscp 进行连接 1、点击新建站点 2、选择协议 3、输入服务器ip 4、输入端口 5、输入用户名,默认用户:admin 6、输入密码,默认密码:bash.lutixia.cn 7、登录 https://zhuanlan.zhihu.com/p/573721115 参考链接 2 无需账号和密码 在同一个文件目录下准备好这个三个文件 start-nginx.sh #!/bin/bash mkdir data docker stop nginx_file_server docker rm nginx_file_server docker run -d -p 8081:8080\ --name nginx_file_server \ -v $(pwd)/data:/data \ -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf \ -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \ nginx:stable-alpine nginx.conf nginx.conf user root; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } default.conf default.conf server { listen 8080; #端口 server_name localhost; #服务名 # for SSL listen port only #ssl_certificate /etc/nginx/conf.d/server.pem; #ssl_certificate_key /etc/nginx/conf.d/server-key.pem; #ssl_protocols TLSv1.2; #ssl_prefer_server_ciphers on; #ssl_session_timeout 5m; #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #underscores_in_headers on; charset utf-8; # 避免中文乱码 root /data; #显示的根索引目录,注意这里要改成你自己的,目录要存在 location / { autoindex on; #开启索引功能 autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb) autoindex_localtime on; # 显示本机时间而非 GMT 时间 } } chmod +x start-nginx.sh && ./start-nginx.sh` 测试一下: echo file_server > data/file1.txt 打开浏览器 http://127.0.0.1:8081/ 4.10 DockerCompose sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version 4.11 安装GitLab 1 下载镜像 docker pull twang2218/gitlab-ce-zh 2 启动容器 docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh 3 进入容器修改配置文件 由于进行了目录映射 也可以不在容器内部进行修改 docker exec -it gitlab bash cd /etc/gitlab vim /etc/gitlab/gitlab.yml 4 修改配置文件 搜索URL external_url 'http://gitlab.example.com' 把url换成自己的 external_url 'http://116.205.133.97/' nginx['listen_port'] = nil nginx['listen_port'] = 82 这个是注释掉的 5 重启服务 这是在容器内部重启服务 gitlab-ctl restart gitlab是有很多组件组成的只有这些组件都运行成功了,才启动成功。 6 访问测试 http://120.78.214.226:8090 第一次登录默认是root用户 密码自己设定 不要低于8位 4.12 安装Jenkins 1 下载镜像 docker pull jenkinsci/blueocean 中文版本 2 创建目录 # mkdir /home/jenkins_home # chown -R 1000:1000 /home/jenkins_home/ # chown -R 1000:1000 /usr/local/src/jdk/jdk1.8/ # chown -R 1000:1000 /opt/apache-maven-3.5.0/ 3 运行容器 docker run \ -d \ --name jenkins \ -p 9999:8080 \ -p 8888:8888 \ -p 50000:50000 \ -v /usr/local/src/jdk/jdk1.8:/usr/local/src/jdk/jdk1.8 \ -v /opt/apache-maven-3.5.0:/opt/apache-maven-3.5.0 \ -v/home/jenkins_home:/var/jenkins_home \ jenkins/jenkins:2.222.3-centos 4 查看密码 docker exec -it jenkins bash cat /var/jenkins_home/secrets/initialAdminPassword b0468f2eb870422abf509fe59f74e003 5 访问测试 http://120.78.214.226:9999/ 6 进行汉化 在安装插件页面输入 chinese 7 替换插件下载地址 https://blog.csdn.net/weixin_45878889/article/details/123867587 4.13 安装SonarQube https://blog.csdn.net/OfficerGoodbody/article/details/126662724 新版SonarQube不支持MySQL 1 下载postgres镜像 docker pull postgres 2 创建文件 mkdir -p /opt/postgres/postgresql mkdir -p /opt/postgres/data 3 创建网络 docker network create sonarqube 4 运行postgres 容器 docker run --name postgres -d -p 5432:5432 --net sonarqube \ -v /opt/postgres/postgresql:/var/lib/postgresql \ -v /opt/postgres/data:/var/lib/postgresql/data \ -v /etc/localtime:/etc/localtime:ro \ -e POSTGRES_USER=sonar \ -e POSTGRES_PASSWORD=sonar \ -e POSTGRES_DB=sonar \ -e TZ=Asia/Shanghai \ --restart always \ --privileged=true \ --network-alias postgres \ postgres:latest 5 安装 sonarQube docker pull sonarqube 6 准备文件夹 mkdir -p /opt/sonarqube echo "vm.max_map_count=262144" > /etc/sysctl.conf sysctl -p 7 先运行一下拷贝文件 docker run -d --name sonarqube sonarqube docker cp sonarqube:/opt/sonarqube/conf /opt/sonarqube docker cp sonarqube:/opt/sonarqube/data /opt/sonarqube docker cp sonarqube:/opt/sonarqube/logs /opt/sonarqube docker cp sonarqube:/opt/sonarqube/extensions /opt/sonarqube 8 删除容器 docker stop sonarqube docker rm sonarqube 9 添加权限 chmod -R 777 /opt/sonarqube/ 10 修改配置文件 vim /opt/sonarqube/conf/ sonar.properties 修改账号和密码 sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar 11 运行容器 docker run -d --name sonarqube -p 9090:9000 \ -e ALLOW_EMPTY_PASSWORD=yes \ -e SONARQUBE_DATABASE_USER=sonar \ -e SONARQUBE_DATABASE_NAME=sonar \ -e SONARQUBE_DATABASE_PASSWORD=sonar \ -e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \ --net sonarqube \ --privileged=true \ --restart always \ -v /opt/sonarqube/logs:/opt/sonarqube/logs \ -v /opt/sonarqube/conf:/opt/sonarqube/conf \ -v /opt/sonarqube/data:/opt/sonarqube/data \ -v /opt/sonarqube/extensions:/opt/sonarqube/extensions\ sonarqube 12测试访问 浏览器输入http://ip:9090,开始初始化数据库初始化成功后进入登录界面,账号:admin 密码:admin 4.14 Zabbix docker-compose 1 安装git yum -y install git 2 下载 代码 git clone https://github.com/zabbix/zabbix-docker 注意要把整个代码下载下来不要只下载docker-compose文件否则会报错 因为缺失 数据库文件 3 进入到 abbix-docker目录 4 启动docker-compose docker-compose -f docker-compose_v3_centos_mysql_latest.yaml up -d 5 web界面访问 http://120.46.214.226 http:ip:端口/zabbix,默认端口80,httpd服务端口 默认登录用户 Admin ,密码 zabbix 5 docker可视化工具 轻量级portanier 下载 docker pull lihaixin/portainer docker run -d -p 9000:9000 --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ --name portainer lihaixin/portainer 访问测试 http://43.138.137.168:9000/#/home 重量级 容器监控 docker-compose.yml配置 version: '3.1' volumes: grafana_data: {} services: influxdb: image: tutum/influxdb:0.9 restart: always environment: - PRE_CREATE_DB=cadvisor ports: - "8083:8083" - "8086:8086" volumes: - ./data/influxdb:/data cadvisor: image: google/cadvisor links: - influxdb:influxsrv command: -storage_driver=influxdb - storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086 restart: always ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro grafana: user: "104" image: grafana/grafana user: "104" restart: always links: - influxdb:influxsrv ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana environment: - HTTP_USER=admin - HTTP_PASS=admin - INFLUXDB_HOST=influxsrv - INFLUXDB_PORT=8086 - INFLUXDB_NAME=cadvisor - INFLUXDB_USER=root - INFLUXDB_PASS=root 关于我 我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步! 各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题 1 V 15938366900 QQ 1576664340 2 微信公众号 朱啸毅 |
CopyRight 2018-2019 实验室设备网 版权所有 |